
def fib(n):
    if n <= 1:
        return n
    return fib(n - 1) + fib(n - 2)

def fib2(n):
    f1 = 0
    f2 = 1
    for _ in range(n):
       f1,f2 = f2,f1+f2
    return f1

def fib_iterative(n):
    a, b = 0, 1
    for _ in range(n):
        a, b = b, a + b

    return a
'''
结论
a, b = b, a + b：保证 a 和 b 同时更新，不会互相干扰。
分开写 a = b 和 b = a + b：a 更新后会影响后续 b 的计算。
所以这两种写法得出的答案不一样。
'''


print(fib(10))
print(fib2(10))
print(fib_iterative(10))

